/// <reference path="../inig.d.ts" />

import { GlobalData } from './utils/global'
export * from './inig'

export enum Environment {
  local = 'local',
  development = 'development',
  production = 'production',
}

export enum Platform {
  /**
   * 小程序平台
   */
  mpapp = 'mpapp',
  /**
   * 浏览器、手机浏览器、微信浏览器、h5
   */
  browser = 'browser',
}

interface InigParams {
  /**
   * 是否为服务端渲染
   * @type boolean
   * @default false
   */
  isServer?: boolean

  /**
   * 环境
   * @available 'production' | 'development' | 'local'
   * @type Environment
   * @default Environment.production
   */
  env?: Environment

  /**
   * 平台
   * @available 'mpapp' | 'browser'
   * @type Platform
   * @default Platform.browser
   */
  platform?: Platform

  /**
   * 初始化的基础参数
   * @type object
   * @default {}
   */
  baseData?: object

  /**
   * 网络超时时间，单位 毫秒
   * 0 表示不设置超时
   * @type number
   * @default 0
   */
  timeout?: number

  /**
   * Cookie，
   * 服务端渲染(isServer: true)时，手动传入Cookie
   * @type object
   * @default {}
   */
  cookie?: {}
}

/**
 * 初始化
 * @param params
 * @param {Environment | string} params.env [ Environment | string ] 接口环境, 默认 `production`, 可选 `local` `development` `production`
 * @param {Platform | string} params.platform [ Platform | string ] 平台，默认 `browser`, 可选 `browser` `mpapp`
 * @param {object} params.baseData [ object ] 接口请求默认参数, 默认 `{}`
 * @param {number} params.timeout [ number ] 接口默认超时时间，单位 毫秒, 默认 `0` 不设置超时
 * @param {boolean} params.isServer [ boolean ] 是否为服务端渲染，默认 `false`
 */
export function Inig(params: InigParams) {
  if (params.isServer) {
    GlobalData.cookies = params.cookie || {}
  }
  GlobalData.isServer = params.isServer || false
  GlobalData.timeout = params.timeout || 0
  GlobalData.env = params.env || Environment.production
  GlobalData.platform = params.platform || Platform.browser
  GlobalData.base_data = params.baseData || {}
}
